package linked.main; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.location.Location; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.ActivityCompat; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.location.LocationListener; import com.google.android.gms.location.LocationRequest; import com.google.android.gms.location.LocationServices; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.database.DataSnapshot; import com.google.firebase.database.DatabaseError; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; import com.google.firebase.database.ValueEventListener; import com.google.firebase.storage.FirebaseStorage; import com.google.firebase.storage.StorageReference; import java.util.ArrayList; public class UserMenu extends AppCompatActivity implements View.OnClickListener, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener,LocationListener { TextView signout_button; ImageButton link_button, link_button3; ImageView find_act, view_act, chat, settings; public static ArrayList<String> businesses = new ArrayList<>(); public static ArrayList<String> bus_key = new ArrayList<>(); private GoogleApiClient mGoogleApiClient; LocationRequest mLocationRequest; private double latitude; private double longitude; private static final String TAG = "CardFragment"; DatabaseReference root = FirebaseDatabase.getInstance().getReference().child("Business_Accounts").child("User_ID"); private String nameText = static_variable_CLASS.bname; //******Variable to hold User Name @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_user_menu); mGoogleApiClient = new GoogleApiClient.Builder(this).addApi(LocationServices.API) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .build(); /* An example to access current user's information FirebaseUser current_user; current_user = FirebaseAuth.getInstance().getCurrentUser(); if (current_user != null){ String name = current_user.getDisplayName(); String email = current_user.getEmail(); Uri photoUrl = current_user.getPhotoUrl; String uid = current_user.getUid(); // The user's ID, unique to the Firebase project. } signout_button = (TextView) findViewById(R.id.signoutButton); signout_button.setOnClickListener(this); link_button = (ImageButton)findViewById(R.id.imageButton1); link_button.setOnClickListener(this); link_button3 = (ImageButton)findViewById(R.id.imageButton3); link_button3.setOnClickListener(this);*/ find_act = (ImageView) findViewById(R.id.findImageView); find_act.setOnClickListener(this); view_act = (ImageView) findViewById(R.id.viewImageView); view_act.setOnClickListener(this); chat = (ImageView) findViewById(R.id.chatImageView); chat.setOnClickListener(this); settings = (ImageView) findViewById(R.id.logoutImageView); settings.setOnClickListener(this); } @Override public void onClick(View v){ if (v == settings){ FirebaseAuth.getInstance().signOut(); startActivity(new Intent(UserMenu.this, Start.class)); } //... if (v == find_act) startActivity(new Intent(this, LocationActivity.class)); else if (v == view_act) //startActivity(new Intent(this, BusinessActivities.class)); showEditProfile(); else if (v == chat) startActivity(new Intent(this, MessagingActivity.class)); } @Override public void onConnected(@Nullable Bundle bundle) { mLocationRequest = LocationRequest.create(); mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); mLocationRequest.setInterval(100000); if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission. See the documentation // for ActivityCompat#requestPermissions for more details. return; } LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this); } @Override protected void onStart() { mGoogleApiClient.connect(); super.onStart(); } @Override protected void onStop() { mGoogleApiClient.disconnect(); super.onStop(); } @Override public void onConnectionSuspended(int i) { } @Override public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { } @Override public void onLocationChanged(Location location) { //update current user location latitude = location.getLatitude(); longitude = location.getLongitude(); root.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { businesses.clear(); bus_key.clear(); for(DataSnapshot snapshot : dataSnapshot.getChildren()){ //if within, save name of the business if(distanceBetween(latitude,longitude,Double.valueOf((String)snapshot.child("latitude").getValue()), Double.valueOf((String) snapshot.child("longitude").getValue()))) { bus_key.add(snapshot.getKey()); businesses.add((String) snapshot.child("business_name").getValue()); } } } @Override public void onCancelled(DatabaseError databaseError) { } }); } boolean distanceBetween(double lat1, double lon1, double lat2, double lon2){ float [] result = new float[1]; //distance between return in meter Location.distanceBetween(lat1,lon1,lat2, lon2,result); //within 2 mile, return true if(result[0] < 3218.74){ return true; } return false; } protected void showEditProfile(){ final EditText nameInput = new EditText(this); nameInput.setHint("Enter new username here."); LinearLayout layout = new LinearLayout(this); layout.setOrientation(LinearLayout.VERTICAL); layout.addView(nameInput); AlertDialog.Builder viewInfo = new AlertDialog.Builder(this); viewInfo.setTitle("My Profile"); viewInfo .setView(layout) .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }) .setPositiveButton("Ok", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String tName=""; tName = nameInput.getText().toString().trim(); if(!tName.isEmpty()){ nameText = tName; //******Update Business Name in Database HERE DatabaseReference root = FirebaseDatabase.getInstance().getReference(); root.child("User_Accounts").child("User_ID").child(static_variable_CLASS.User_ID).child("username").setValue(nameText); } dialog.dismiss(); } }); AlertDialog dialog = viewInfo.create(); dialog.show(); } }